package gestores;

import interfaces.EcranAddCompany;
import interfaces.EcranEmpresa;
import interfaces.EcranGuest;
import interfaces.EcranInicial;
import interfaces.EcranJogador;
import interfaces.EcranLogin;
import interfaces.EcranLogout;
import interfaces.EcranSair;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.image.Image;
import javafx.stage.Stage;
import cliente.Cliente;
import dados.Accao;
import dados.Stock;

public class GestorInterfaces {
	
	private static final Image logotipo = new Image("imagens/coinFinal.png");
	
	private Cliente cliente;
	private Stage stageActual;
	
	private TextArea agenteTextArea;
	private EcranInicial ecranInicial;
	
	public GestorInterfaces(Cliente cliente) {
		this.cliente = cliente;
	}

	public void start(Stage stage) {
		stageActual = stage;
		System.out.println("Start...");
		System.out.println("Stage: " + stageActual);
		EcranLogin ecranLogin = new EcranLogin(stage, cliente, this);

		stage.setScene(new Scene(ecranLogin));
		stage.show();
		stage.getIcons().addAll(logotipo);
	}

	public void ecranInicial(Stage stageInicial) {
		stageActual = stageInicial;
		System.out.println("StageInicial: " + stageActual);
		ecranInicial = new EcranInicial(stageInicial, cliente, this, cliente.getAgenteTextArea());
		ecranInicial.tableAllStocks(cliente.getAllStocksList());
		cliente.setListUserStocks(FXCollections.observableList(cliente.getJogador().getAccoes()));
		ecranInicial.tableUserStocks(stageInicial, cliente.getUserStocksList());
		agenteTextArea = ecranInicial.getAgenteTextArea();
		cliente.iniciarGestorTransaccoes();
		stageInicial.setScene(new Scene(ecranInicial));
		stageInicial.show();
		stageInicial.setTitle("MyStock");
		stageInicial.getIcons().addAll(logotipo);
	}

	public void ecranGuest(Stage stageGuest) {
		stageActual = stageGuest;
		EcranGuest ecranGuest = new EcranGuest(stageGuest, cliente, this);

		stageGuest.setScene(new Scene(ecranGuest));
		stageGuest.show();
		stageGuest.setTitle("MyStock");
		stageGuest.getIcons().addAll(logotipo);
	}

	public void ecranSair(Stage stageSair) {
		EcranSair ecranSair = new EcranSair(stageSair, this);

		stageSair.setScene(new Scene(ecranSair));
		stageSair.show();
		stageSair.setTitle("MyStock");
		stageSair.getIcons().addAll(logotipo);
	}

	public void ecranLogout(Stage stageLogout) {
		EcranLogout ecranLogout = new EcranLogout(stageLogout, cliente, this);

		stageLogout.setScene(new Scene(ecranLogout));
		stageLogout.show();
		stageLogout.setTitle("MyStock");
		stageLogout.getIcons().addAll(logotipo);
	}

	public void ecranAddCompanies(Stage stageAddCompanies){
		EcranAddCompany ecranCompanies = new EcranAddCompany(stageAddCompanies, cliente);
		stageAddCompanies.setScene(new Scene(ecranCompanies));
		
		stageAddCompanies.show();
		stageAddCompanies.setTitle("Escolha as suas empresas");
		stageAddCompanies.getIcons().addAll(logotipo);
	}

	public void ecranEmpresa(Stage stageEmpresa, Stock stock) {
		stageActual = stageEmpresa;
		System.out.println("StageEmpresa: " + stageActual);
		EcranEmpresa ecranEmpresa = new EcranEmpresa(stageEmpresa, cliente, this, stock, cliente.accaoJogador(stock), cliente.getJogador());
		
		stageEmpresa.setScene(new Scene(ecranEmpresa));
		stageEmpresa.show();
		stageEmpresa.setTitle("MyStock");
		stageEmpresa.getIcons().addAll(logotipo);
	}
	
	public void ecranEmpresaAccao(Stage stageEmpresa, Accao accao) {
		stageActual = stageEmpresa;
		System.out.println("StageEmpresa: " + stageActual);
		EcranEmpresa ecranEmpresa = new EcranEmpresa(stageEmpresa, cliente, this, cliente.stockJogador(accao), accao, cliente.getJogador());

		stageEmpresa.setScene(new Scene(ecranEmpresa));
		stageEmpresa.show();
		stageEmpresa.setTitle("MyStock");
		stageEmpresa.getIcons().addAll(logotipo);
	}

	public void ecranJogador(Stage stageJogador) {
		stageActual = stageJogador;
		System.out.println("stageJogador: " + stageActual);
		EcranJogador ecranJogador = new EcranJogador(stageJogador, cliente, this, cliente.getAgenteTextArea());
		agenteTextArea = ecranJogador.getAgenteTextArea();
		cliente.iniciarGestorTransaccoes();
		stageJogador.setScene(new Scene(ecranJogador));
		stageJogador.show();
		stageJogador.setTitle("MyStock");
		stageJogador.getIcons().addAll(logotipo);
	}
	
	public Stage getStageActual() {
		return stageActual;
	}

	public TextArea getAgenteTextArea() {
		return agenteTextArea;
	}
	
	public void actualizarTabelaStocks(ObservableList<Stock> stocks){
//		System.out.println("OBS:" + stocks);
		if (ecranInicial != null) {
			ecranInicial.getTableStocks().setItems(stocks);
		}
	}
}